/**
 * Created by jiachenpan on 16/11/18.
 */

/* 验证用户名，可扩展*/
export function isvalidUsername(str) {
  if (!str) return false
  return str.trim().length > 0
}

/* 验证密码，可扩展*/
export function isvalidPassword(str) {
  if (!str) return false
  return str.trim().length >= 5
}

/* 合法uri*/
export function validateURL(textval) {
  const urlregex =
    /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return urlregex.test(textval)
}

/* 小写字母*/
export function validateLowerCase(str) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

/* 大写字母*/
export function validateUpperCase(str) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

/* 大小写字母*/
export function validateAlphabets(str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

/* 正整数*/
export function validatePositiveNum(str) {
  const reg = /^[0-9]*$/
  return reg.test(str)
}

/* 输入框验证是否数值，可保留两位小数 */
export function checkInputNum(num) {
  return checkInputNumWithPoint(num, 2)
}

/* 输入框验证是否数值，可保留自定义小数 */
export function checkInputNumWithPoint(num, decimalPoint) {
  // 判断是否是数字
  const numParse = parseFloat(num)
  if (isNaN(numParse)) {
    return ''
  }
  const decimalPointParse = parseInt(decimalPoint)
  const finalPoint = isNaN(decimalPointParse) ? 0 : decimalPointParse

  const str = num.toString()
  const havePointFlag = str.indexOf('.') !== -1
  const numArr = str.split('.')
  // 去除多个0
  const numStr = parseInt(numArr[0]).toString()
  let pointStr = numArr[1]
  let finalStr
  finalStr = numStr.length > 8 ? numStr.substr(0, 8) : numStr
  if (finalPoint > 0) {
    if (havePointFlag) {
      finalStr += '.'
      if (pointStr) {
        // 清楚所有非数字
        pointStr = pointStr.replace(/[^\d]/g, '')
        finalStr += pointStr.length > finalPoint ? pointStr.substr(0, finalPoint) : pointStr
      }
    }
  }
  return finalStr
}

/* 输入框验证是否正整数，不含0 */
export function checkInputPositiveNum(num) {
  let str = checkInputNumWithPoint(num, 0)
  if (str === '0') {
    str = ''
  }
  return str
}

/* 手机号*/
export function isvalidatePhone(str) {
  const reg = /^1\d{10}$/
  return reg.test(str)
}

/**
 * validate email
 * @param email
 * @returns {boolean}
 */
export function validateEmail(email) {
  const re =
    /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  return re.test(email)
}

/*
 * @Description:身份证校验规则.
 * @Version: 1.0
 * @Author: Nydia
 * @Date: 2020-06-28 19:02:19
 * @LastEditors: Nydia
 * @LastEditTime: 2020-06-29 08:36:09
 */
// 在js文件中写一个身份校验的方法，在需要身份校验的vue组件中导入这个js文件，调用暴露出去的校验方法。传入的参数为用户输入的身份证号
// 校验身份证号
export function checkIsIdentityId(identityId) {
  var patrn = /(^\d{15}$)|(^\d{17}(\d|X|x)$)/ // 长度或格式校验
  // 地区校验
  var aCity = {
    11: '北京',
    12: '天津',
    13: '河北',
    14: '山西',
    15: '内蒙古',
    21: '辽宁',
    22: '吉林',
    23: '黑龙江',
    31: '上海',
    32: '江苏',
    33: '浙江',
    34: '安徽',
    35: '福建',
    36: '江西',
    37: '山东',
    41: '河南',
    42: '湖北',
    43: '湖南',
    44: '广东',
    45: '广西',
    46: '海南',
    50: '重庆',
    51: '四川',
    52: '贵州',
    53: '云南',
    54: '西藏',
    61: '陕西',
    62: '甘肃',
    63: '青海',
    64: '宁夏',
    65: '新疆',
    71: '台湾',
    81: '香港',
    82: '澳门',
    91: '国外'
  }
  // 出生日期验证
  var sBirthday = (
    identityId.substr(6, 4) +
    '-' +
    Number(identityId.substr(10, 2)) +
    '-' +
    Number(identityId.substr(12, 2))
  ).replace(/-/g, '/')
  var d = new Date(sBirthday)
  // 身份证号码校验 最后4位  包括最后一位的数字/字母X
  var sum = 0
  var weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  var codes = '10X98765432'
  for (var i = 0; i < identityId.length - 1; i++) {
    sum += identityId[i] * weights[i]
  }
  var last = codes[sum % 11] // 计算出来的最后一位身份证号码

  var errorMsg = ''
  if (identityId === '') {
    errorMsg = '身份证号不能为空'
  } else if (!patrn.exec(identityId)) {
    errorMsg = '你输入的身份证长度或格式错误'
  } else if (!aCity[parseInt(identityId.substr(0, 2))]) {
    errorMsg = '你的身份证地区非法'
  } else if (sBirthday !== d.getFullYear() + '/' + (d.getMonth() + 1) + '/' + d.getDate()) {
    errorMsg = '身份证上的出生日期非法'
  } else if (identityId[identityId.length - 1] !== last) {
    errorMsg = '你输入的身份证号非法'
  }
  return errorMsg
}
